﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>WinClose</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>WinClose</h1>

<p>关闭匹配指定条件的窗口。</p>

<p class="CommandSyntax">WinClose [, WinTitle, WinText, SecondsToWait, ExcludeTitle, ExcludeText]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr> 
    <td width="15%">WinTitle</td>
    <td width="85%">目标窗口的标题或标题中的部分文字（匹配模式由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定）。如果省略其它 3 个窗口参数，默认目标是 <a href="../LastFoundWindow.htm">上一次匹配窗口</a> 。如果这个参数使用字母 A ，同时省略其它 3 个窗口参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 <em>ahk_class 精确 class 名</em>（Window Spy 中可以显示 class 名）。要用窗口的 <a href="Process.htm">进程标识符（PID）</a>进行匹配，使用 <em>ahk_pid %PID变量%</em> 。要用 <a href="GroupAdd.htm">窗口组</a> ，使用 <em>ahk_group 组名</em> （此时 <em>WinText</em> ，<em>ExcludeTitle</em> ，以及 <em>ExcludeText</em> 三个变量要省略）。要用窗口的 <a href="WinGet.htm">唯一 ID</a> 进行匹配，使用 <em>ahk_id %ID变量%</em> 。要减小检测范围，使用 <a href="../LastFoundWindow.htm#multi">多重条件</a> ，例如：<em>My File.txt ahk_class Notepad</em></td>
  </tr>
  <tr> 
    <td>WinText</td>
    <td>如果使用这个参数，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 <a href="DetectHiddenText.htm">DetectHiddenText</a> 设置为 ON 的时候才能检测到。</td>
  </tr>
  <tr>
    <td>SecondsToWait</td>
    <td>如果省略或留空，命令完全不会等待。如果使用 0 ，会等待 500ms 。否则，它会等待指定的时间（可以包含小数点或者是一个 <a href="../Variables.htm#Expressions">表达式</a> ）来让窗口彻底关闭。如果窗口在指定的时间内并未关闭，脚本会继续执行，但是该命令 <strong>不会</strong> 设置 ErrorLevel/错误等级 。所以当需要检测一个窗口是否已被关闭的时候，使用 <a href="IfWinExist.htm">IfWinExist</a> 或 <a href="WinWaitClose.htm">WinWaitClose</a> 。当该命令处于等待状态的时候，仍然可以通过 <a href="../Hotkeys.htm">快捷键</a> ，<a href="Menu.htm">自定义菜单</a> ，或 <a href="SetTimer.htm">定时器</a> 来启动新的 <a href="../misc/Threads.htm">线程</a> 。</td>
  </tr>
  <tr>
    <td>ExcludeTitle</td>
    <td>标题中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
  <tr>
    <td>ExcludeText</td>
    <td>文本元素中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
</table>

<h3>注意</h3>
<p>这个命令传送一个关闭信息给窗口，结果取决于窗口（可能会询问是否保存数据，或其它）。</p>
<p>如果匹配的窗口中有一个处于激活状态，那么它会被关闭，脚本不会再去关闭其它的匹配窗口。一般情况下，如果匹配的窗口不止一个，处于最前端（最近使用）的窗口将被关闭。</p>
<p>这个命令只对匹配窗口中处于最前端的进行操作，除了在 <em>WinTitle</em> 参数中使用 <a href="GroupAdd.htm">ahk_group 组名</a> 的时候，这时候会影响窗口组中的所有窗口。</p>
<p>WinClose 通过发送一个 WM_CLOSE 消息给目标窗口来关闭窗口。这个关闭的方法稍微有一点强迫性。另外一个关闭窗口的方法是发送下面那样的消息给窗口。这个方法和 WinClose 有点不同，它更接近按 Alt + F4 或者点击标题栏上关闭按钮的效果：</p>
<pre>PostMessage, 0x112, 0xF060,,, WinTitle, WinText  <em>; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE</em></pre>
<p>用 WinClose 不能关闭的窗口，可以使用 <a href="WinKill.htm">WinKill</a> 强制关闭。</p>
<p>窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口，必须打开 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 。</p>
<h3>相关命令</h3>
<p><a href="WinKill.htm">WinKill</a>, <a href="WinWaitClose.htm">WinWaitClose</a>, <a href="Process.htm">Process</a>, <a href="WinActivate.htm">WinActivate</a>, <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a>, <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a>, <a href="../LastFoundWindow.htm">Last Found Window</a>, <a href="IfWinExist.htm">IfWinExist</a>, <a href="IfWinActive.htm">IfWinActive</a>, <a href="WinWaitActive.htm">WinWaitActive</a>, <a href="WinWait.htm">WinWait</a>, <a href="GroupActivate.htm">GroupActivate</a></p>
<h3>示例</h3>
<pre class="NoIndent">IfWinExist, Untitled - Notepad
    WinClose <em>; 使用上面找到的窗口</em>
else
    WinClose, Calculator</pre>

</body>
</html>
